1 CALL CLEAR :: CALL SCREEN(5)
2 CALL CHAR(92,"1C3C5CFC1C1C3E3F3F3E1C0CECAC8CFC1C3C5CFC1C1C3E3F3F3E1C0CECAC8CFC")
3 CALL MAGNIFY(4)
4 CALL SPRITE(#1,92,11,160,1,0,-60)
5 CALL SPRITE(#2,92,7,1,160,0,60)
6 DISPLAY AT(11,6)ERASE ALL :"HEBDOGICIEL PRESENTE "
7 FOR I=1 TO 90 :: CALL SOUND(1,-1,0) :: NEXT I
100 !
110 CALL CLEAR :: CALL SCREEN(1) :: CALL COLOR(12,8,1)
120 CALL COLOR(1,11,1,2,3,1,3,9,1,4,9,1,5,14,1,6,14,1,7,14,1,8,11,1,9,8,1,10,8,1,11,8,1)
130 CALL CHAR(33,"387CF4F6FF79486C1C3E2F6FFF9E123670FAEFEEFC78486C0E5FF7773F1E1236")
135 CALL CLEAR :: CALL DELSPRITE(#1,#2)
140 CALL CHAR(37,"0000183C3C180000185A24DBDB245A1870D878063149827C",92,"3C7EFFFFFFFF7E3C3C4299A1A199423C")
147 CALL MAGNIFY(1)
150 CALL CHAR(94,"3F4381A581C3DBC3FFC05E52427E00FFFCDA81DBDB81DAFC")
160 CALL HCHAR(1,3,42,27) :: CALL HCHAR(3,3,42,27) :: CALL HCHAR(6,5,45,23) :: CALL HCHAR(17,10,45,12) :: CALL HCHAR(22,10,45,12)
170 DISPLAY AT(2,1):"* ! S  A  U  T  E  U  R ' *" :: DISPLAY AT(5,2):"*************************"
180 DISPLAY AT(7,1):"  -Je suis le petit sauteur    que vous commandez         -Vous aurez un bonus de      temps si vous m attrapez"
190 DISPLAY AT(11,1):"  -Vous pouvez sauter sur      moi pour vous sauver.      -Je suis un futur serpent    qui fait tres mal."
200 DISPLAY AT(15,1):"  -Je suis le serpent ...     -Atention a moi ..."
210 DISPLAY AT(18,1):"Chaque case marque 10 pointsmultiplie  par le niveau. La( % ) = 100 pts.Un ! de plusa chaque nouveau tableau"
220 CALL SPRITE(#1,33,7,48,20,#2,37,13,64,20,#3,38,11,80,20,#4,92,14,96,20,#5,39,14,112,20)
230 CALL SPRITE(#6,92,9,122,20)
240 DISPLAY AT(23,1):"% touche ALPHA/LOCK levee % bouton du ! TIR ' pour jouer" :: GOSUB 280 :: GOTO 360
250 DATA 1,165,165,247,208,294,370,330,294,165,165,247,208,294,370,330,294,2,220,220,277,294,330,196,247,294,220
260 DATA 220,277,294,330,196,247,294,1,165,165,247,208,294,370,330,294,165,165,247,208,294,370,330,294,3,247,247
270 DATA 311,370,440,415,440,415,2,220,220,277,294,330,196,247,294,4
280 RESTORE 250
290 READ F :: IF F=4 THEN 280
300 IF F<5 THEN Q=F :: GOTO 290
310 CALL SOUND(130,F,2) :: ON Q GOTO 320,330,340
320 CALL SOUND(130,330,10,415,11,494,12) :: GOTO 350
330 CALL SOUND(130,220,10,277,11,330,12) :: GOTO 350
340 CALL SOUND(130,247,10,311,11,370,12)
350 CALL KEY(1,K,S) :: IF S=0 THEN 290 ELSE RETURN
360 CALL DELSPRITE(ALL) :: CALL CLEAR :: HC$="00000"
370 A1$="0103070F1F3F7FFF" :: A2$="80C0E0F0F8FCFEFF" :: A3$="FFFEFCF8F0E0C080" :: A4$="FF7F3F1F0F070301"
380 CALL CHAR(40,A1$,41,A2$,64,A4$,65,A2$,72,A3$,73,A1$,80,A4$,81,A2$,88,A3$,89,A1$,120,A1$,121,A2$,128,A4$,136,A3$)
390 G=5 :: D=14 :: H=8 :: HH=11 :: NS=4 :: NV=1 :: BR,SC,BL,NCAS=0
400 CALL DES(G,D,H,HH) :: CALL AFF(HC$,NV,NS) :: CALL PTS(SC,SC$) :: RANDOMIZE
410 FOR I=1 TO 3 :: W=INT(RND*12+1) :: ON W GOTO 420,430,440,450,460,470,480,490,500,510,520,530
420 DX=108 :: DY=44 :: GOTO 540
430 DX=100 :: DY=60 :: GOTO 540
440 DX=92 :: DY=76 :: GOTO 540
450 DX=84 :: DY=92 :: GOTO 540
460 DX=76 :: DY=108 :: GOTO 540
470 DX=68 :: DY=124 :: GOTO 540
480 DX=182 :: DY=124 :: GOTO 540
490 DX=174 :: DY=108 :: GOTO 540
500 DX=166 :: DY=92 :: GOTO 540
510 DX=158 :: DY=76 :: GOTO 540
520 DX=150 :: DY=60 :: GOTO 540
530 DX=142 :: DY=44
540 CALL SPRITE(#3+I,38,RND*13+3,DY,DX) :: CALL SOUND(99,-2,2) :: NEXT I
550 DISPLAY AT(24,1):"bouton du ! tir ' pour jouer" :: GOSUB 280
560 DISPLAY AT(24,1) :: CALL SPRITE(#1,92,14,1,125) :: CALL TOMB(1) :: CALL SOUND(10,550,2) :: DE=1 :: CALL DEP(1,F)
570 CALL SOUND(10,550,2) :: NS=NS-1 :: CALL AFF(HC$,NV,NS)
580 CALL SPRITE(#2,33,7,1,125) :: SX=125 :: SY=36
590 CALL POSITION(#1,EY,EX) :: CALL TOMB(2) :: CALL SOUND(10,2000,2)
600 ! boucle principale
610 CALL JOYST(1,X,Y)
620 IF X=0 OR Y=0 THEN 690
630 IF X=4 AND Y=-4 THEN SX=SX+8 :: SY=SY+16 :: P=33 :: GOTO 670
640 IF X=-4 AND Y=-4 THEN SX=SX-8 :: SY=SY+16 :: P=34 :: GOTO 670
650 IF X=-4 AND Y=4 THEN SX=SX-8 :: SY=SY-16 :: P=36 :: GOTO 670
660 SX=SX+8 :: SY=SY-16 :: P=35
670 CALL PATTERN(#2,P) :: CALL LOCATE(#2,SY,SX) :: CALL SOUND(10,2000,2)
680 CALL DISTANCE(#1,#2,D) :: IF D=0 THEN 1440
690 IF DE=1 THEN CALL DEP(1,F) :: IF F=1 THEN DE=0 :: CALL PATTERN(#1,39)
700 CALL POSITION(#1,EY,EX) :: IF DE=1 THEN 760
710 IF RND*6>NV THEN 760
720 IF SX-EX=0 AND SY-EY=0 THEN 760
730 IF SX-EX>1 THEN EX=EX+8 ELSE EX=EX-8
740 IF SY-EY>1 THEN EY=EY+16 ELSE EY=EY-16
750 CALL LOCATE(#1,EY,EX)
760 CALL SOUND(10,550,2) :: CALL DISTANCE(#1,#2,D) :: IF D=0 THEN 1440
770 CALL TEST(1,TB) :: IF TB=1 THEN GOSUB 1330
780 CALL TEST(2,TB) :: IF TB=1 THEN 1360
790 CALL CASE(SX,SY,NCAS,SC,NV) :: CALL PTS(SC,SC$) :: IF NCAS=28 THEN 1150
800 IF BL=1 THEN 980
810 IF RND*99>86+NV THEN GOSUB 960
820 IF BR=1 THEN 890
830 IF RND*50>50-NV THEN GOSUB 940
840 GOTO 610
850 CALL SPRITE(#26,94,15,SY-10,SX,#27,95,15,SY-10,SX+8,#28,96,15,SY-10,SX+16)
860 FOR T=1 TO 2 :: FOR I=-7 TO-1 :: CALL SOUND(50,I,0) :: NEXT I :: NEXT T
870 CALL DELSPRITE(#26,#27,#28) :: RETURN
880 ! deplace boule rouge
890 CALL DISTANCE(#2,#7,D) :: IF D<40 THEN 1440
900 CALL POSITION(#7,RY,RX) :: IF RX>SX THEN RX=RX-8 ELSE RX=RX+8
910 CALL SOUND(50,8000,2) :: RY=RY+16 :: IF RY>135 THEN CALL DELSPRITE(#7) :: BR=0 :: GOTO 840
920 CALL LOCATE(#7,RY,RX) :: CALL DISTANCE(#2,#7,D) :: IF D<40 THEN 1440 ELSE 840
930 ! cree boule rouge
940 CALL SPRITE(#7,92,9,1,125) :: CALL TOMB(7) :: CALL SOUND(50,8000,2) :: BR=1 :: RETURN
950 ! cree boule verte
960 CALL SPRITE(#3,37,13,1,125) :: CALL TOMB(3) :: CALL SOUND(50,5000,2) :: BL=1 :: RETURN
970 ! deplace boule verte
980 CALL DISTANCE(#2,#3,D) :: IF D<40 THEN 1020
990 CALL DEP(3,F) :: CALL SOUND(50,5000,2) :: IF F=1 THEN CALL DELSPRITE(#3) :: BL=0
1000 GOTO 820
1010 ! boule verte coulee
1020 CALL SCREEN(16) :: SC=SC+100 :: CALL SOUND(99,330,0) :: CALL DELSPRITE(#3) :: BL=0 :: BCL=0
1030 CALL JOYST(1,X,Y)
1040 IF X=0 OR Y=0 THEN 1100
1050 IF X=4 AND Y=-4 THEN SX=SX+8 :: SY=SY+16 :: P=33 :: GOTO 1090
1060 IF X=-4 AND Y=-4 THEN SX=SX-8 :: SY=SY+16 :: P=34 :: GOTO 1090
1070 IF X=-4 AND Y=4 THEN SX=SX-8 :: SY=SY-16 :: P=36 :: GOTO 1090
1080 SX=SX+8 :: SY=SY-16 :: P=35
1090 CALL PATTERN(#2,P) :: CALL LOCATE(#2,SY,SX) :: CALL SOUND(10,2000,2)
1100 CALL TEST(2,TB) :: IF TB=1 THEN CALL SCREEN(1) :: GOTO 1360
1110 CALL CASE(SX,SY,NCAS,SC,NV) :: IF NCAS=28 THEN 1150
1120 CALL PTS(SC,SC$) :: BCL=BCL+1 :: IF BCL<6 THEN 1030
1130 CALL SCREEN(1) :: GOTO 820
1140 ! niveau de jeu 8
1150 CALL SCREEN(6) :: BR,BL,NCAS=0 :: NV=NV+1 :: NS=NS+2
1160 DATA 330,440,550,770,110,330,440,550,770,440,330,220
1170 RESTORE 1160 :: FOR I=1 TO 12 :: READ F :: CALL SOUND(100,F,0) :: NEXT I :: CALL SOUND(500,110,0)
1180 IF NV=9 THEN NV=8
1190 ON NV-1 GOTO 1200,1210,1220,1230,1240,1250,1260
1200 D=7 :: G=14 :: H=11 :: HH=8 :: GOTO 1270
1210 D=4 :: G=13 :: H=11 :: HH=10 :: GOTO 1270
1220 D=9 :: G=11 :: H=8 :: HH=2 :: GOTO 1270
1230 D=2 :: G=11 :: H=3 :: HH=8 :: GOTO 1270
1240 D=2 :: G=2 :: H=9 :: HH=11 :: GOTO 1270
1250 D=3 :: G=2 :: H=14 :: HH=8 :: GOTO 1270
1260 D=7 :: G=11 :: H=2 :: HH=2
1270 CALL SCREEN(1) :: CALL DELSPRITE(ALL) :: CALL CLEAR :: GOTO 400
1280 ! tombe sauteur
1290 GOSUB 850
1300 CALL MOTION(#2,10,0) :: FOR I=110 TO 1000 STEP 50 :: CALL SOUND(-50,I,0) :: NEXT I :: CALL DELSPRITE(#2)
1310 NS=NS-1 :: IF NS<>0 THEN CALL AFF(HC$,NV,NS) :: GOTO 580 ELSE 1480
1320 ! tombe serpent
1330 CALL MOTION(#1,10,0) :: FOR I=110 TO 1000 STEP 50 :: CALL SOUND(-50,I,0) :: NEXT I :: CALL DELSPRITE(#1)
1340 CALL SPRITE(#1,92,14,1,125) :: CALL TOMB(1) :: CALL SOUND(10,550,2) :: DE=1 :: RETURN
1350 ! sauteur et disque ?
1360 CALL DISTANCE(#2,#4,D) :: IF D<70 THEN Q=4 :: GOTO 1410
1370 CALL DISTANCE(#2,#5,D) :: IF D<70 THEN Q=5 :: GOTO 1410
1380 CALL DISTANCE(#2,#6,D) :: IF D<70 THEN Q=6 :: GOTO 1410
1390 GOTO 1290
1400 !sauteur + disque monte
1410 CALL SOUND(-2000,-7,2) :: CALL POSITION(#Q,DY,DX) :: X=SGN(125-DX) :: Y=SGN(1-DY) :: CALL MOTION(#Q,10*Y,5*X,#2,10*Y,5*X)
1420 CALL COINC(#2,1,125,9,D) :: IF D=0 THEN 1420 ELSE CALL DELSPRITE(#Q,#2) :: GOTO 580
1430 ! sauteur bouffe ...
1440 GOSUB 850 :: CALL SOUND(800,-6,0) :: IF NS-1=0 THEN 1480
1450 CALL SCREEN(10) :: FOR T=1 TO 30 :: CALL SOUND(30,110*T,2) :: NEXT T
1460 CALL DELSPRITE(#1,#2,#7) :: CALL SCREEN(1) :: BR=0 :: GOTO 560
1470 ! fin du jeu
1480 HC=VAL(HC$) :: IF SC>HC THEN HC$=SC$ :: CALL AFF(HC$,NV,NS) :: DISPLAY AT(21,8):"meilleur  score"
1490 DISPLAY AT(22,10):"fin du jeu"
1500 FOR T=110 TO 5000 STEP 220 :: CALL SOUND(-50,T,0,110,10) :: NEXT T
1510 FOR I=16 TO 2 STEP-1 :: CALL SCREEN(I) :: CALL SOUND(-50,I*110,0) :: FOR T=1 TO 30 :: NEXT T :: NEXT I
1520 DISPLAY AT(24,2):"bouton du ! tir ' s v p" :: GOSUB 280
1530 !
1540 !
1550 CALL DELSPRITE(ALL) :: CALL CLEAR :: GOTO 390
1560 ! dessin et couleurs
1570 SUB DES(G,D,H,HH)
1580 CALL COLOR(2,H,1,5,G,H,6,D,H,7,G,HH,8,D,HH,12,HH,1,13,G,1,14,D,1)
1590 CALL HCHAR(5,16,40) :: CALL HCHAR(5,17,41) :: X=16 :: Y=6 :: L=1 :: GOSUB 1660
1600 CALL HCHAR(7,15,40) :: CALL HCHAR(7,18,41) :: X=15 :: Y=8 :: L=2 :: GOSUB 1660
1610 CALL HCHAR(9,14,40) :: CALL HCHAR(9,19,41) :: X=14 :: Y=10 :: L=4 :: GOSUB 1660
1620 CALL HCHAR(11,13,40) :: CALL HCHAR(11,20,41) :: X=13 :: Y=12 :: L=6 :: GOSUB 1660
1630 CALL HCHAR(13,12,40) :: CALL HCHAR(13,21,41) :: X=12 :: Y=14 :: L=8 :: GOSUB 1660
1640 CALL HCHAR(15,11,40) :: CALL HCHAR(15,22,41) :: X=11 :: Y=16 :: L=10 :: GOSUB 1660
1650 CALL HCHAR(17,10,40) :: CALL HCHAR(17,23,41) :: X=10 :: Y=18 :: L=12 :: GOSUB 1660 :: GOTO 1680
1660 FOR I=X TO X+L STEP 2 :: CALL HCHAR(Y,I,65) :: CALL HCHAR(Y,I+1,73) :: CALL HCHAR(Y+1,I,64) :: CALL HCHAR(Y+1,I+1,72)
1670 CALL SOUND(-99,110*I,4) :: NEXT I :: RETURN
1680 FOR I=10 TO 22 STEP 2 :: CALL HCHAR(19,I,128) :: CALL HCHAR(19,I+1,136) :: NEXT I
1690 SUBEND
1700 ! souspro/tombee
1710 SUB TOMB(LU)
1720 CALL MOTION(#LU,10,0) :: CALL SOUND(800,-2,2)
1730 CALL COINC(#LU,36,125,8,C) :: IF C=0 THEN 1730 ELSE CALL MOTION(#LU,0,0) :: CALL LOCATE(#LU,36,125)
1740 SUBEND
1750 ! souspro/points
1760 SUB PTS(SC,SC$)
1770 SC$=STR$(SC)
1780 IF LEN(SC$)<5 THEN SC$="0"&SC$ :: GOTO 1780
1790 DISPLAY AT(2,4):SC$
1800 SUBEND
1810 ! teste sur pyramide?
1820 SUB TEST(LU,TB)
1830 TB=0 :: CALL POSITION(#LU,Y,X) :: IF Y=36 AND X<>125 THEN 1920
1840 IF Y<36 OR Y>132 THEN 1920
1850 IF Y=52 AND(X<117 OR X>133)THEN 1920
1860 IF Y=68 AND(X<109 OR X>141)THEN 1920
1870 IF Y=84 AND(X<101 OR X>149)THEN 1920
1880 IF Y=100 AND(X<93 OR X>157)THEN 1920
1890 IF Y=116 AND(X<85 OR X>165)THEN 1920
1900 IF Y=132 AND(X<77 OR X>173)THEN 1920
1910 SUBEXIT
1920 TB=1 :: SUBEND
1930 ! souspro/affichage
1940 SUB AFF(HC$,NV,NS)
1950 DISPLAY AT(1,1):"hc=";HC$ :: DISPLAY AT(2,1)SIZE(3):"sc=" :: DISPLAY AT(3,1):"nv=";NV
1960 IF NS-1<>-1 THEN DISPLAY AT(5,1)SIZE(5):RPT$(CHR$(33),NS-1)
1970 SUBEND
1980 ! souspro/deplacement
1990 SUB DEP(LU,F)
2000 F=0 :: CALL POSITION(#LU,Y,X) :: IF(RND*10)>5 THEN X=X+8 ELSE X=X-8
2010 Y=Y+16 :: IF Y>132 THEN F=1 :: SUBEXIT
2020 CALL LOCATE(#LU,Y,X) :: SUBEND
2030 ! souspro/des cases
2040 SUB CASE(X,Y,N,SC,NV)
2050 CX=X/8 :: CY=Y/8+1 :: CALL GCHAR(CY,CX,C) :: IF C=81 THEN SUBEXIT
2060 CALL HCHAR(CY,CX,81) :: CALL HCHAR(CY,CX+1,89) :: CALL GCHAR(CY-1,CX,C)
2070 IF C=40 THEN CALL HCHAR(CY-1,CX,120)ELSE CALL HCHAR(CY-1,CX,88)
2080 CALL GCHAR(CY-1,CX+1,C) :: IF C=41 THEN CALL HCHAR(CY-1,CX+1,121)ELSE CALL HCHAR(CY-1,CX+1,80)
2090 SC=SC+10*NV :: N=N+1
2100 SUBEND
